﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace Unimaq.FacturaDBS_Spring.LogicaNegocio.Version2.DBS
{
    public class DBS_CabeceraBLL
    {
        #region Metodos adicionales
        public string getTipoComprobante(string tipoDocumento)
        {
            string result = string.Empty;

            switch (tipoDocumento.Trim())
            {
                case "FA":
                case "fa":
                    result = "FA";
                    break;
                case "BO":
                case "bo":
                    result = "BV";
                    break;
                case "NA":
                case "na":
                    result = "NC";
                    break;
                case "NC":
                case "nc":
                    result = "ND";
                    break;
            }

            return result;
        }

        public DateTime convertTextToDateTime(string value)
        {
            //Formato: yyyyMMdd
            return DateTime.ParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture);
            //return new DateTime(int.Parse(value.Substring(0, 4)), int.Parse(value.Substring(4, 2)), int.Parse(value.Substring(6, 2)));
        }

        public string convertMoneda(string value)
        {
            string result = string.Empty;

            switch (value.Trim())
            {
                case "D":
                case "d":
                    result = "EX";
                    break;
                case "N":
                case "n":
                    result = "LO";
                    break;
            }

            return result;
        }

        public string getDocumentoRelacionado(string documento)
        {
            string result = string.Empty;

            if (documento.Length == 12)
            {
                result = string.Format("{0}-{1}-{2}", getTipoComprobante(documento.Substring(3, 2)), documento.Substring(0, 3), documento.Substring(5, 7));
            }

            return result;
        }

        public string getSucursal(decimal value)
        {
            string result = string.Empty;

            int val = Convert.ToInt32(value);

            switch (val)
            {
                case 0:
                case 1:
                case 2:
                    result = "LIMA";
                    break;
                case 18:
                case 20:
                    result = "HYO";
                    break;
                case 30:
                    result = "PIUR";
                    break;
                case 40:
                    result = "LAMB";
                    break;
                case 45:
                    result = "CAJA";
                    break;
                case 55:
                    result = "TRUJ";
                    break;
                case 60:
                    result = "AREQ";
                    break;
                case 61:
                    result = "ILO";
                    break;
                case 65:
                    result = "CUZC";
                    break;
                default:
                    result = string.Empty;
                    break;
            }

            return result;
        }
        #endregion

        public List<Entidades.Version2.DBS.DBS_Cabecera> Listar_AS400(DateTime fechaEmisionInicio, DateTime fechaEmisionFin)
        {
            ADO.Version2.DBS.DBS_CabeceraADO dbs_CabeceraADO = new ADO.Version2.DBS.DBS_CabeceraADO();

            using (Util.ContextoDBAS400 ctx = Util.ContextoDBAS400.GetContexto())
            {
                return dbs_CabeceraADO.Listar_AS400(ctx, fechaEmisionInicio, fechaEmisionFin);
            }
        }

        public List<Entidades.Version2.Spring.CM_CO_Comprobante_Interfase> ConverTo_Spring(List<Entidades.Version2.DBS.DBS_Cabecera> lista)
        {
            List<Entidades.Version2.Spring.CM_CO_Comprobante_Interfase> result = new List<Entidades.Version2.Spring.CM_CO_Comprobante_Interfase>();

            foreach (Entidades.Version2.DBS.DBS_Cabecera l in lista)
            {
                Entidades.Version2.Spring.CM_CO_Comprobante_Interfase cab =
                    new Entidades.Version2.Spring.CM_CO_Comprobante_Interfase()
                    {
                        TipoComprobante = getTipoComprobante(l.Suntip),
                        SerieComprobante = l.Sunpre.Value.ToString(),
                        NumeroComprobante = l.Sunnum.Value.ToString(),
                        IdClienteFacturacion = int.Parse(l.Codcli.Trim()),
                        Sucursal = getSucursal(l.Ofic.Value),
                        DocumentoCliente = l.Numruc.Trim(),
                        NombreCliente = l.Rsocia.Trim(),
                        DireccionCliente = l.Direcc.Trim(),
                        FechaEmision = convertTextToDateTime(l.Fecemi.Trim()),
                        Moneda = convertMoneda(l.Moneda),
                        TipoCambio = l.Tipcam.Value,
                        MontoAfecto = l.Suntip.Trim() == "NC" ? l.Vavta1.Value : l.Valaf16.Value,
                        MontoNoAfecto = new decimal(0),
                        MontoImpuestoVentas = l.Impor16.Value,
                        CentroCosto = l.Cencos.Trim() == "UA" ? "UH" : l.Cencos.Trim(),
                        TipoDocumentoRelacionado = l.Refnot.Substring(3, 2),
                        SerieDocumentoRelacionado = l.Refnot.Substring(0, 3),
                        DocumentoRelacionado = l.Refnot.Substring(5, 7),
                        EstadoDocumento = 3,
                        ClasificadorMovimiento = "999",
                        UnidadOrganizacional = "999",
                        TipoVenta = 1,
                        EstadoCarga = "PE",
                        Estado = "PE",
                        ConceptoGasto = "999",
                        UsuarioCreacion = l.Usuinc.Trim(),
                        CodigoInterno = l.Numori.Trim(),
                        FechaCarga = DateTime.Now,
                        UsuarioResponsableCarga = "MISESF",
                        Compania = "06000000",
                        ProcentajeDetraccion = l.Tasim20.Value,
                        NumeroOrdenCompra = l.Orden.Trim()
                    };

                result.Add(cab);
            }

            return result;
        }
    }
}
